#ifndef DATABASESPECIFICMANAGER_H
#define DATABASESPECIFICMANAGER_H

#include <QObject>
#include <QSqlDatabase>
#include <QMap>
#include <QStringList>
#include <QVariant>

class DatabaseSpecificManager : public QObject
{
    Q_OBJECT

public:
    explicit DatabaseSpecificManager(QObject *parent = nullptr);
    
    // 设置当前数据库
    void setDatabase(const QSqlDatabase &db);
    
    // 获取特定数据库类型的函数列表
    QStringList getFunctions() const;
    
    // 获取特定数据库类型的存储过程列表
    QStringList getProcedures() const;
    
    // 获取特定数据库类型的触发器列表
    QStringList getTriggers() const;
    
    // 获取特定数据库类型的视图列表
    QStringList getViews() const;
    
    // 获取特定表的索引信息
    QVariantMap getTableIndexes(const QString &tableName) const;
    
    // 获取特定表的约束信息
    QVariantMap getTableConstraints(const QString &tableName) const;
    
    // 获取特定表的外键信息
    QVariantMap getTableForeignKeys(const QString &tableName) const;
    
    // 获取特定表的DDL语句
    QString getTableDDL(const QString &tableName) const;
    
    // 获取数据库大小信息
    QVariantMap getDatabaseSizeInfo() const;
    
    // 获取数据库版本信息
    QString getDatabaseVersion() const;
    
    // 获取数据库参数设置
    QVariantMap getDatabaseParameters() const;
    
    // 执行特定于数据库的管理命令
    bool executeManagementCommand(const QString &command, QVariantMap &result);
    
private:
    // 特定数据库类型的实现函数
    void loadSQLiteSpecifics();
    void loadMySQLSpecifics();
    void loadPostgreSQLSpecifics();
    void loadOracleSpecifics();
    void loadSQLServerSpecifics();
    
    // 辅助函数
    QVariantMap executeQuery(const QString &query) const;
    QString escapeIdentifier(const QString &identifier) const;
    
    QSqlDatabase m_database;
    QString m_databaseType;
    QMap<QString, QVariant> m_databaseInfo;
};

#endif // DATABASESPECIFICMANAGER_H